package cn.itcast.web.controller.company;

import cn.itcast.domain.company.Company;
import cn.itcast.service.company.CompanyService;
import cn.itcast.web.controller.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;

@Controller
@RequestMapping("/company")  // 代表的是某一个类的映射
public class CompanyController extends BaseController {

    @Reference
    private CompanyService companyService;

       /*
           路径： /company/list.do
           作用：进入企业列表
           参数： 当前页，页面大小
           返回值： 企业列表页面
        */
    @RequestMapping("/list")
    @RequiresPermissions("企业管理")
    public String list(@RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "5") Integer pageSize){
        //硬编码做权限校验
       /* Subject subject = SecurityUtils.getSubject();
        subject.checkPermission("企业管理");*/


        //1. 查找到所有的企业
        PageInfo<Company> pageInfo = companyService.findByPage(pageNum,pageSize);
        //2. 把查询的企业存储到request域中
        request.setAttribute("pageInfo",pageInfo);
//         <property name="prefix" value="/WEB-INF/pages/"/>
        //3. 跳回到企业页面列表页面
        return "company/company-list";
    }



    /*
        路径： /company/toAdd.do
        作用：进入企业添加页面
        参数： 无
        返回值： company-add
     */
    @RequestMapping("/toAdd")
    public String toAdd(){
        return "company/company-add";
    }


    /*
       路径： /company/edit.do
       作用：保存添加企业与保存修改企业
       参数： 企业对象
       返回值：企业列表
    */
    @RequestMapping("/edit")
    public String edit(Company company){
        //1.判断提交的参数是否带有id
        if(StringUtils.isEmpty(company.getId())){
            //2. 如果id为空，则为添加
            companyService.save(company);
        }else{
            //3. 如果id非空，则修改
            companyService.update(company);
        }
        //4. 返回企业列表
        //如果直接返回company/list.do这时候是会经过视图解析器添加前缀后缀的， /WEB-INF/pages/company/list.do
        //如果不希望经过视图解析器，我们需要在返回值添加redirect或者是forward字符串
        return "redirect:/company/list.do";
    }

    /*
      路径： /company/toUpdate.do?id=10e5332c-6fb0-4cf9-b008-7e49feb33ba9
      作用：进入修改企业页面
      参数：企业id
      返回值：company-update
   */
    @RequestMapping("/toUpdate")
    public String toUpdate(String id){
        //1.根据id查找到对应的企业
        Company company = companyService.findById(id);
        //2. 把企业存储到请求域中
        request.setAttribute("company",company);
        //3. 跳转到企业修改页面
        return "company/company-update";
    }

    /*
    路径： /company/delete.do?id=02e1da04-43f8-42e1-a4c2-66e162c6f4a5
    作用：删除企业
    参数：企业id
    返回值：企业列表
 */
    @RequestMapping("/delete")
    public String delete(String id){
        //1.根据企业的id删除企业
        companyService.delete(id);
        //2. 返回企业列表
        return "redirect:/company/list.do";
    }

}
